unit PessoaDM;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
  ZDataset, ZSqlUpdate, ZSequence, MainDM, DB, QueryConditions;

type

  { TPessoaData }

  TPessoaData = class(TMainDataModule)
    PessoaDatasource: TDatasource;
    PessoaFisicaDatasource: TDatasource;
    PessoaFisicaZQuery: TZQuery;
    PessoaFisicaZQuerycpf: TStringField;
    PessoaFisicaZQuerydata_nascimento: TDateField;
    PessoaFisicaZQueryid_pessoa_fisica: TLargeintField;
    PessoaFisicaZQuerynome_mae: TStringField;
    PessoaFisicaZQueryrg_numero: TStringField;
    PessoaFisicaZUpdate: TZUpdateSQL;
    PessoaJuridicaDatasource: TDatasource;
    PessoaJuridicaZQuery: TZQuery;
    PessoaJuridicaZQuerycnpj: TStringField;
    PessoaJuridicaZQueryid_pessoa_juridica: TLargeintField;
    PessoaJuridicaZQueryinscricao_estadual: TStringField;
    PessoaJuridicaZQueryinscricao_municipal: TStringField;
    PessoaJuridicaZQuerynome_fantasia: TStringField;
    PessoaJuridicaZUpdate: TZUpdateSQL;
    PessoaZQuery: TZQuery;
    PessoaZQuerybairro: TStringField;
    PessoaZQuerycaixa_postal: TStringField;
    PessoaZQuerycep: TStringField;
    PessoaZQuerycomplemento: TStringField;
    PessoaZQuerydesc_cidade: TStringField;
    PessoaZQueryemail: TStringField;
    PessoaZQueryendereco: TStringField;
    PessoaZQueryid_cidade: TLargeintField;
    PessoaZQueryid_pessoa: TLargeintField;
    PessoaZQuerynome_pessoa: TStringField;
    PessoaZQuerynota: TStringField;
    PessoaZQuerynumero: TLongintField;
    PessoaZQuerytelefone_celular: TStringField;
    PessoaZQuerytelefone_fax: TStringField;
    PessoaZQuerytelefone_fixo: TStringField;
    PessoaZQuerytipo: TStringField;
    PessoaZQueryuf: TStringField;
    PessoaZSequence: TZSequence;
    PessoaZUpdate: TZUpdateSQL;
    procedure DataModuleCreate(Sender: TObject);
    /// Abre o DataSet
    procedure OpenDataSet(); override;
    /// Fecha o DataSet
    procedure CloseDataSet(); override;
    /// Realiza busca
    /// @param(Condicoes são as condições para a busca)
    /// @param(Tabela é a tabela no banco de dados)
    procedure Search(Condicoes: TQueryConditions; Tabela: string); override;
    procedure TipoPessoaIncluir(tipo: char);
    procedure TipoPessoaAlterar(tipo: char);
    procedure TipoPessoaExcluir(tipo: char);
    procedure TipoPessoaSalvar(tipo: char);
    procedure TipoPessoaCancel(tipo: char);
  end;

var
  PessoaData: TPessoaData;

implementation

uses ConnectionDM;

{ TPessoaData }

procedure TPessoaData.DataModuleCreate(Sender: TObject);
begin
  MainDataSet := PessoaZQuery;
end;

procedure TPessoaData.OpenDataSet;
begin
  ConnectionData.EmptyQuery(PessoaZQuery, 'pessoa');
  PessoaFisicaZQuery.Open;
  PessoaJuridicaZQuery.Open;
  //ConnectionData.EmptyQuery(PessoaFisicaZQuery, 'pessoa_fisica');
  //ConnectionData.EmptyQuery(PessoaJuridicaZQuery, 'pessoa_juridica');
end;

procedure TPessoaData.CloseDataSet;
begin
  PessoaFisicaZQuery.Close();
  PessoaJuridicaZQuery.Close();
  PessoaZQuery.Close();
end;

procedure TPessoaData.Search(Condicoes: TQueryConditions; Tabela: string);
begin
  ConnectionData.OpenQueryConditions(PessoaZQuery, Tabela, Condicoes);
  //ShowMessage(IntToStr(PessoaZQuery.RecordCount));
end;

procedure TPessoaData.TipoPessoaIncluir(tipo: char);
begin
  if (upcase(tipo) = 'J') then begin
    if (PessoaJuridicaZQuery.RecordCount = 0) then begin
      if (PessoaFisicaZQuery.RecordCount > 0) then begin
        ShowMessage('Pessoa já cadastrada como Pessoa Física!');
      end else begin
        PessoaJuridicaZQuery.Insert();
        PessoaJuridicaZQuery.FieldByName('id_pessoa_juridica').Value :=
          PessoaZQuery.FieldByName('id_pessoa').Value;
      end;
    end;
  end else begin
    if (PessoaFisicaZQuery.RecordCount = 0) then begin
      if (PessoaJuridicaZQuery.RecordCount > 0) then begin
        ShowMessage('Pessoa já cadastrada como Pessoa Jurídica!');
      end else begin
        PessoaFisicaZQuery.Insert();
        PessoaFisicaZQuery.FieldByName('id_pessoa_fisica').Value :=
          PessoaZQuery.FieldByName('id_pessoa').Value;
      end;
    end;
  end;
end;

procedure TPessoaData.TipoPessoaAlterar(tipo: char);
begin
  if (upcase(tipo) = 'J') then begin
    if (PessoaJuridicaZQuery.RecordCount > 0) then begin
      PessoaJuridicaZQuery.Edit();
    end;
  end else begin
    if (PessoaFisicaZQuery.RecordCount > 0) then begin
      PessoaFisicaZQuery.Edit();
    end;
  end;
end;

procedure TPessoaData.TipoPessoaExcluir(tipo: char);
begin
  if (upcase(tipo) = 'J') then begin
    if (PessoaJuridicaZQuery.RecordCount > 0) then begin
      PessoaJuridicaZQuery.Delete();
    end;
  end else begin
    if (PessoaFisicaZQuery.RecordCount > 0) then begin
      PessoaFisicaZQuery.Delete();
    end;
  end;
end;

procedure TPessoaData.TipoPessoaSalvar(tipo: char);
begin
  if (upcase(tipo) = 'J') then begin
    if (PessoaJuridicaZQuery.State in dsWriteModes) then begin
      PessoaJuridicaZQuery.Post();
    end;
  end else begin
    if (PessoaFisicaZQuery.State in dsWriteModes) then begin
      PessoaFisicaZQuery.Post();
    end;
  end;
  PessoaZQuery.Edit;
  PessoaZQuery.FieldByName('tipo').Value:=upcase(tipo);
  PessoaZQuery.Post;
end;

procedure TPessoaData.TipoPessoaCancel(tipo: char);
begin
  if (upcase(tipo) = 'J') then begin
    if (PessoaJuridicaZQuery.State in dsWriteModes) then begin
      PessoaJuridicaZQuery.Cancel();
    end;
  end else begin
    if (PessoaFisicaZQuery.State in dsWriteModes) then begin
      PessoaFisicaZQuery.Cancel();
    end;
  end;

end;

initialization
  {$I pessoadm.lrs}

end.

